//
//  HMSportMapViewController.m
//  HMBest22
//
//  Created by Apple on 17/1/9.
//  Copyright © 2017年 Apple. All rights reserved.
//

#import "HMSportMapViewController.h"
#import <MAMapKit/MAMapKit.h>
#import "HMCircleAnimator.h"
#import "HMSportMapModeViewController.h"
@interface HMSportMapViewController ()<MAMapViewDelegate,UIPopoverPresentationControllerDelegate>
/// 用户开始运动的位置
@property (nonatomic, strong) CLLocation *startLocation;

@property (nonatomic) BOOL isHasStartLocation;
/// 转场动画器
@property (nonatomic, strong) HMCircleAnimator *circleAnimator;
/// 运动的总距离
@property (weak, nonatomic) IBOutlet UILabel *distanceLabel;
/// 运动的总时长
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@end

@implementation HMSportMapViewController

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        // 创建转场动画器
        self.circleAnimator = [[HMCircleAnimator alloc] init];
        // 设置转场的代理方法为动画器
        self.transitioningDelegate = self.circleAnimator;
        // 设置自定义模态转场
        self.modalPresentationStyle = UIModalPresentationCustom;
    }
    return self;
}

/// 从xib中唤醒时就会调用
- (void)awakeFromNib
{
    [super awakeFromNib];
    [self setUpMapView];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    // 用户的位置就是起点位置
}

- (void)setUpMapView
{
    // 创建高德地图
    MAMapView *mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
    self.mapView = mapView;
    // 隐藏比例尺
    mapView.showsScale = NO;
    ///缩放级别（默认3-19，有室内地图时为3-20）
//    mapView.zoomLevel = 3;
    // 显示罗盘
    mapView.showsCompass = YES;
    // 实时交通
    mapView.showTraffic = YES;
    // 关闭相机旋转(只有3D地图才有)
    mapView.rotateCameraEnabled = NO;
    // 显示用户的位置
    mapView.showsUserLocation = YES;
//    MAUserTrackingModeNone              = 0,    ///< 不追踪用户的location更新
//    MAUserTrackingModeFollow            = 1,    ///< 追踪用户的location更新
//    MAUserTrackingModeFollowWithHeading = 2     ///< 追踪用户的location与heading更新
    // 设置用户的跟踪模式
    mapView.userTrackingMode = MAUserTrackingModeFollow;
    // 允许临时使用后台位置更新
    mapView.allowsBackgroundLocationUpdates = YES;
    // 不允许系统自动暂停后台位置更新
    mapView.pausesLocationUpdatesAutomatically = NO;
    // 设置地图代理
    mapView.delegate = self;
    // 插入的界面下面
    [self.view insertSubview:mapView atIndex:0];
}

/**
 * @brief 位置或者设备方向更新后，会调用此函数
 * @param mapView 地图View
 * @param userLocation 用户定位信息(包括位置与设备方向等数据)
 * @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新
  大概1秒钟调用一次
 // '位置数据'更新
 */
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation
{
    
    if (!updatingLocation) {
        return;
    }
 
    // 只要卫星定位到用户的位置  就会传入userLocation
    // updatingLocation :判断用户的定位信息有没有发生改变
//    NSLog(@"%@",userLocation.location);
    if (!_isHasStartLocation && self.sportTracking.userLocation != nil) {
        // 保证只创建一个起点大头针
        _isHasStartLocation = YES;
        
        // 添加起点的大头针
        MAPointAnnotation *point = [[MAPointAnnotation alloc] init];
        // 设置大头针的经纬度
        point.coordinate = self.sportTracking.userLocation.coordinate;
        // 放入地图上
        [mapView addAnnotation:point];
    }
    
    // 设置用户的位置为地图界面的中心
    self.mapView.centerCoordinate = userLocation.location.coordinate;
    // 拼接不同的定位  获取之间的折线
    MAPolyline *polyline = [self.sportTracking appendLocation:userLocation.location];
    // 添加折线到地图上
    [mapView addOverlay:polyline];
    
    // 展示UI
    [self setUpDispalyUI];
    
    // 发送代理
    if ([self.delegate respondsToSelector:@selector(userLocationDidUpdate:)]) {
        [self.delegate userLocationDidUpdate:self];
    }
}

- (void)setUpDispalyUI
{
    // 距离   0.00
    self.distanceLabel.text = [NSString stringWithFormat:@"%.02f",self.sportTracking.totalDistance];
    
    
    // 运动总时间
    self.timeLabel.text = self.sportTracking.totalTimeStr;
}
/**
 * @brief 根据anntation生成对应的View
 * @param mapView 地图View
 * @param annotation 指定的标注
 * @return 生成的标注View
 */
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation
{
//    NSLog(@"%@",annotation);
    // 如果是蓝色大头针 样式交由系统管理
    if ([annotation isKindOfClass:[MAUserLocation class]]) {
        return nil;
    }
    
    // 自定义大头针
    static NSString *annotationID = @"annotationID";
    // 获取大头针界面
    MAAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotationID];
    // 创建大头针界面
    if (annotationView == nil) {
        annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationID];
        }
    
    // 设置图片
    annotationView.image = self.sportTracking.image;
    // 修改大头针显示的位置
    annotationView.centerOffset = CGPointMake(0, -self.sportTracking.image.size.height * 0.5);

    return annotationView;
}

/**
 * @brief 单击地图回调，返回经纬度
 * @param mapView 地图View
 * @param coordinate 经纬度
 */
- (void)mapView:(MAMapView *)mapView didSingleTappedAtCoordinate:(CLLocationCoordinate2D)coordinate
{
    
   
    // 获取单词运动的模型
//    HMSportTrackingLine *trackineLine = [[HMSportTrackingLine alloc] initWithStartLocation:self.startLocation andEndLocation:[[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude]];
//    // 添加到地图上
//    [mapView addOverlay:trackineLine.polyline];
}
/**
 * @brief 根据overlay生成对应的Renderer
 * @param mapView 地图View
 * @param overlay 指定的覆盖物
 * @return 生成的覆盖物Renderer
 */
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay
{
    if (![overlay isKindOfClass:[MAPolyline class]]) {
        return nil;
    }
    // 创建折线渲染
    MAPolylineRenderer *renderer = [[MAPolylineRenderer alloc] initWithPolyline:overlay];
    HMSportPolyline *sportPolyline =  (HMSportPolyline *)overlay;
    // 设置颜色
    renderer.strokeColor = sportPolyline.color;
    // 设置线宽
    renderer.lineWidth = 5;
    return renderer;
}


/// 界面即将跳转调用
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // 1.获取目标控制器
    HMSportMapModeViewController *mapModeVC = segue.destinationViewController;
    // 设置popover的界面大小
    mapModeVC.preferredContentSize = CGSizeMake(0, 120);
    // 2.获取popover
    UIPopoverPresentationController *popoverPC = mapModeVC.popoverPresentationController;
    // 3.设置代理
    popoverPC.delegate = self;
    
    [mapModeVC setSelectMapMode:^(MAMapType type) {
        _mapView.mapType = type;
    }];
    
    // 设置地图模式控制器的当前的地图类型
    mapModeVC.currentMapType = _mapView.mapType;
//    self.view.layer.cornerRadius
}

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
    
    // 关闭iPhone中popover默认效果
    return UIModalPresentationNone;
}
- (IBAction)dismissController:(id)sender
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
@end
